package org.finesys.common.netty.websocket.wrapper;

import io.netty.channel.Channel;
import io.netty.handler.codec.http.QueryStringDecoder;
import org.finesys.common.netty.websocket.support.WsPathMatcher;

import java.util.Objects;

public class DefaultPathMatcherWrapper implements WsPathMatcher {

    private final String pattern;

    /**
     * 构造方法，用于创建一个带有指定模式的DefaultPathMatcherWrapper对象。
     *
     * @param pattern 要匹配的模式字符串
     */
    public DefaultPathMatcherWrapper(String pattern) {
        this.pattern = pattern;
    }

    /**
     * 获取当前对象的模式字符串。
     *
     * @return 返回当前对象的模式字符串。
     */
    @Override
    public String getPattern() {
        return this.pattern;
    }

    /**
     * 重写matchAndExtract方法，用于判断并提取查询字符串中的特定参数。
     *
     * @param decoder 包含查询字符串的解码器对象
     * @param channel 对应的通道对象
     * @return 如果pattern与decoder的路径相等，则返回true，表示匹配成功；否则返回false
     */
    @Override
    public boolean matchAndExtract(QueryStringDecoder decoder, Channel channel) {
        return pattern.equals(decoder.path());
    }

    /**
     * 重写equals方法，用于比较两个DefaultPathMatcherWrapper对象是否相等。
     *
     * @param o 要比较的对象
     * @return 如果当前对象与o相等，则返回true；否则返回false
     */
    @Override
    public boolean equals(Object o) {
        if (this == o)
            return true;
        if (o == null || getClass() != o.getClass())
            return false;
        DefaultPathMatcherWrapper that = (DefaultPathMatcherWrapper) o;
        return Objects.equals(pattern, that.pattern);
    }

    /**
     * 重写hashCode方法，用于生成当前对象的哈希码。
     *
     * @return 当前对象的哈希码
     */
    @Override
    public int hashCode() {
        return Objects.hash(pattern);
    }
}
